/*
 * 文 件 名:  ExportExcelUtil.java
 * 版    权:  Epro Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  <描述>
 * 修 改 人:  徐斌 yz221
 * 修改时间:  2014-2-24
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.bdth.utils;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;

import javax.mail.internet.MimeUtility;
import javax.servlet.http.HttpServletRequest;
import java.net.URLEncoder;
import java.util.Date;

public class ExportExcelUtil {

    /*
     * 设置下载文件中文件的名称
     *
     * @param filename
     *
     * @param request
     *
     * @return
     */
    public static String encodeFilename(String filename,
                                        HttpServletRequest request) {
        /**
         * 获取客户端浏览器和操作系统信息 在IE浏览器中得到的是：User-Agent=Mozilla/4.0 (compatible; MSIE
         * 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)
         * 在Firefox中得到的是：User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1;
         * zh-CN; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
         */
        String agent = request.getHeader("USER-AGENT");
        try {
            if ((agent != null) && (-1 != agent.indexOf("MSIE"))) {
                String newFileName = URLEncoder.encode(filename, "UTF-8");
                newFileName = StringUtils.replace(newFileName, "+", "%20");
                if (newFileName.length() > 150) {
                    newFileName = new String(filename.getBytes("GB2312"),
                            "ISO8859-1");
                    newFileName = StringUtils.replace(newFileName, " ", "%20");
                }
                return newFileName;
            }
            if ((agent != null) && (-1 != agent.indexOf("Mozilla")))
                return MimeUtility.encodeText(filename, "UTF-8", "B");

            return filename;
        } catch (Exception ex) {
            return filename;
        }
    }

    public static void writeRowLine(Workbook workbook, Sheet sheet, CellStyle cellStyle,
                                    Font headerFont, int rowNO, Object... data) {

        if (null == data) {
            return;
        }
        int idx = 0;


        // 产生一行
        Row row = sheet.createRow(rowNO);
        for (Object val : data) {

            // 产生第一个单元格
            Cell cell = row.createCell(idx++);

            // 设置单元格内容为字符串型
            cell.setCellType(XSSFCell.CELL_TYPE_STRING);

            // 设置单元格字体
            // HSSFFont headerFont = workbook.createFont(); // 字体
            // headerFont.setFontHeightInPoints((short) 11);
            // headerFont.setFontName("Arial");
            // if(rowNO <= 1)
            // {
            // //设置粗体
            // headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            // cellStyle.setFont(headerFont);
            // }

            cell.setCellStyle(cellStyle);
            // 根据传入的单元格值填写内容
            // String(Default)
            // Double
            // Date
            // Boolean
            if (val instanceof Double) {
                cell.setCellValue((Double) val);
            }
            if (val instanceof Integer) {
                cell.setCellValue((Integer) val);
            } else if (val instanceof Date) {
                cell.setCellValue((Date) val);
            } else if (val instanceof Boolean) {
                cell.setCellValue((Boolean) val);
            } else {
                cell.setCellValue(val.toString());
            }

        }
    }
}
